package com.cskaoyan.javase.oop2._2polymorphic._2advantage.instanceofs;

/**
 * 用法:
 * 引用 instanceof 类名
 * 含义是 判断左边引用所指向的对象,是否是后面类名的对象或者子类对象
 * 如果是,上述结构会返回true
 * 否者 返回false
 * 所以上述语法结构往往配合if使用
 * 一旦上述结构返回true 表示左边的引用可以强转成右边类名的引用
 *
 * 特殊的,当左边的引用指向null时,该结构永远都是false
 *
 * @since 15:42
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Grandfather gf = new Son();
        // 这里表示就是后面类名的对象
        System.out.println(gf instanceof Son);
        // 这里表示是后面类名的子类对象
        System.out.println(gf instanceof Father);
        gf = null;
        System.out.println(gf instanceof Son);
        System.out.println(gf instanceof Father);
    }
}

class Grandfather {
}

class Father extends Grandfather {
}

class Son extends Father {
}